package com.le.medium.class1;

import org.junit.Test;

/**
 * 给定一个函数f，可以1～5的数字等概率返回一个。请加工出1～7的数字等概率 返回一个的函数g。
 * 给定一个函数f，可以a～b的数字等概率返回一个。请加工出c～d的数字等概率 返回一个的函数g。
 * 给定一个函数f，以p概率返回0，以1-p概率返回1。请加工出等概率返回0和1的 函数g
 */
public class Problem05_Rand5ToRand7 {

    // 等概率返回 1~5
    public static int f(){
        return (int) (Math.random() * 5) + 1;
    }

    // 等概率返回 0 1
    public static int fun(){
        int rest = 0;
        do {
            rest = f();
        }while (rest == 3);
        return rest < 3 ? 0 : 1;
    }

    // 等概率返回 1--7
    public static int process1(){
        int result = 0;
        do {
            result = (fun() << 2) + (fun() << 1) + fun();
        }while (result == 4);
        return result;
    }

    @Test
    public void test(){
        for (int i = 0; i < 10; i++) {
            System.out.println(process1());
        }
    }
}
